package com.espressif.iot.esptouch.task;

public interface IEsptouchTaskParameter
{
    
    /**
     * get interval millisecond for guide code(the time between each guide code sending)
     * 
     * @return interval millisecond for guide code(the time between each guide code sending)
     */
    long getIntervalGuideCodeMillisecond();
    
    /**
     * get interval millisecond for data code(the time between each data code sending)
     * 
     * @return interval millisecond for data code(the time between each data code sending)
     */
    long getIntervalDataCodeMillisecond();
    
    /**
     * get timeout millisecond for guide code(the time how much the guide code sending)
     * 
     * @return timeout millisecond for guide code(the time how much the guide code sending)
     */
    long getTimeoutGuideCodeMillisecond();
    
    /**
     * get timeout millisecond for data code(the time how much the data code sending)
     * 
     * @return timeout millisecond for data code(the time how much the data code sending)
     */
    long getTimeoutDataCodeMillisecond();
    
    /**
     * get timeout millisecond for total code(guide code and data code altogether)
     * 
     * @return timeout millisecond for total code(guide code and data code altogether)
     */
    long getTimeoutTotalCodeMillisecond();
    
    /**
     * get total repeat time for executing esptouch task
     * 
     * @return total repeat time for executing esptouch task
     */
    int getTotalRepeatTime();
    
    /**
     * the length of the Esptouch result 1st byte is the total length of ssid and password, the other 6 bytes are the
     * device's bssid
     */
    
    /**
     * get esptouchResult length of one
     * 
     * @return length of one
     */
    int getEsptouchResultOneLen();
    
    /**
     * get esptouchResult length of mac
     * 
     * @return length of mac
     */
    int getEsptouchResultMacLen();
    
    /**
     * get esptouchResult length of ip
     * 
     * @return length of ip
     */
    int getEsptouchResultIpLen();
    
    /**
     * get esptouchResult total length
     * 
     * @return total length
     */
    int getEsptouchResultTotalLen();
    
    /**
     * get port for listening(used by server)
     * 
     * @return port for listening(used by server)
     */
    int getPortListening();
    
    /**
     * get target hostname
     * 
     * @return target hostame(used by client)
     */
    String getTargetHostname();
    
    /**
     * get target port
     * 
     * @return target port(used by client)
     */
    int getTargetPort();
    
    /**
     * get millisecond for waiting udp receiving(receiving without sending)
     * 
     * @return millisecond for waiting udp receiving(receiving without sending)
     */
    int getWaitUdpReceivingMillisecond();
    
    /**
     * get millisecond for waiting udp sending(sending including receiving)
     * 
     * @return millisecond for waiting udep sending(sending including receiving)
     */
    int getWaitUdpSendingMillisecond();
    
    /**
     * get millisecond for waiting udp sending and receiving
     * 
     * @return millisecond for waiting udp sending and receiving
     */
    int getWaitUdpTotalMillisecond();
    
    /**
     * get the threshold for how many correct broadcast should be received
     * 
     * @return the threshold for how many correct broadcast should be received
     */
    int getThresholdSucBroadcastCount();
    
    /**
     * set the millisecond for waiting udp sending and receiving
     * 
     * @param waitUdpTotalMillisecond the millisecond for waiting udp sending and receiving
     */
    void setWaitUdpTotalMillisecond(int waitUdpTotalMillisecond);
    
    /**
     * get the count of expect task results
     * 
     * @return the count of expect task results
     */
    int getExpectTaskResultCount();
    
    /**
     * set the count of expect task results
     * 
     * @param expectTaskResultCount the count of expect task results
     */
    void setExpectTaskResultCount(int expectTaskResultCount);
}
